package com.ipay.wechat.service;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import com.ipay.wechat.pojo.PayorderEntity;
import com.ipay.wechat.pojo.TPayresultEntity;
import com.ipay.wechat.pojo.TradeRecord;
import com.ipay.wechat.util.CustomException;

public interface TradeRecordService {

	void save(TradeRecord payorder);
	/**
	 * 查找交易流水列表
	 *
	 * @param map
	 * @return
	 */
	List<TradeRecord> findTradeRecordList(Map<String, Object> map);
	/**
	 * 查找交易流水列表
	 *
	 * @param map
	 * @return
	 */
	List<TradeRecord> findTkTradeRecordList(Map<String, Object> map);

	TradeRecord findTradeRecordDetails(String recordNo);

	TradeRecord queryByRecordNo(String recordNo);

	/**
	 * 收款单日期分组
	 * @return
	 */
	List<String> findDateGrouping(TradeRecord payorder);
	/**
	 * 查找交易流水列表
	 * 
	 * @param payorder
	 * @return
	 */
	List<TradeRecord> findTradeRecordPage(TradeRecord payorder);
	/**
	 * 查询当天订单总金额
	 * @param map
	 * @return
	 */
	BigDecimal findTodaySumAmount(Map<String, Object> map);
	/**
	 * 查询某个订单退款总金额
	 * @param map
	 * @return
	 */
	BigDecimal findRefundSumAmount(Map<String, Object> map);
	/**
	 * 查询成功订单总数
	 * @param map
	 * @return
	 */
	Integer findCountRecord(Map<String, Object> map);
	/**
	 * //扇形统计图数据查询
	 * @param payorder
	 * @return
	 */
	List<Map<String,String>> queryMerchantInfoList(TradeRecord payorder);
	/**
	 * //扇形统计图数据查询
	 * @param payorder
	 * @return
	 */
	List<Map<String,String>> queryCategoryAmount(TradeRecord payorder);

	/**
	 * 推送交易信息通知
	 * @param map
	 */
	void pushTradeMessage(Map<String, Object> map);

	/**
	 * 修改订单状态专用（定时器块）
	 * @param payorder
	 * @return
	 */
	void updateRefundStart(TradeRecord payorder) throws CustomException;
	/**
	 * 修改订单状态专用（定时器块）
	 * @param payorder
	 * @return
	 */
	void updateRefundStart(TradeRecord payorder,TPayresultEntity entity);


	/**
	 * 修改订单状态专用（定时器块   退款订单状态修改  更新发起订单状态）
	 * @param payorder
	 * @return
	 */
	void updateOrder(TradeRecord payorder);

	/**
	 * 加载access_token到redis里
	 */
	public String freshAccessToken();
	/**
	 * 加载access_token到redis里
	 */
	public String getAccessToken();
	
	/**
	 * 根据传入参数查询订单
	 * @param map
	 * @return
	 */
	TradeRecord queryByParam(Map<String, String> map);
}
